/**
 * Copyright @2012 中国电信甘肃万维公司 All rights reserved.
 * 中国电信甘肃万维公司 专有/保密源代码,未经许可禁止任何人通过任何* 渠道使用、修改源代码.
 * 日期 2012-7-27 下午03:15:50
 */
package com.oa.cs.agreement.util;

import java.util.List;
import java.util.Map;

import com.oa.cs.agreement.Agreement;

/**
 * <p>
 * MapConverter描述:Map值转换器
 * </p>
 * @company 中国电信甘肃万维公司 
 *
 * @project nma-s-agreement
 *
 * @version V2.0.0
 *
 * @author 郭磊(产品部)
 *
 * @date 2012-7-27 下午03:15:50	
 *
 * @class com.oa.s.agreement.MapConverter
 *
 */
public class MapConverter<T> implements Agreement
{
	/** 
	 *  serialVersionUID :  TODO 序列化ID
	 */
	private static final long serialVersionUID = -6866684251362146760L;
	
	/** 
	 *  data :  TODO 数据体	Map<String,Object>
	 */
	private Map<String,T> data = null;
	
	public MapConverter(Map<String,T> data)
	{
		this.data = data;
	}
	
	/**
	 * TODO 设置一个参数
	 * @param key
	 * @param value
	 */
	public void setParameter(String key , T value)
	{
		this.data.put(key, value);
	}
	
	/**
	 * TODO 批量多个参数
	 * @param parameters
	 */
	public void setParameters(Map<String,T> parameters)
	{
		this.data.putAll(parameters);
	}
	
	/**
	 * TODO 获取参数
	 * @param key 参数key
	 * @return 参数值
	 */
	public Object getParameter(String key)
	{
		return this.data.get(key);
	}
	
	/**
	 * TODO 获取参数，如果该参数不存在则返回defaultValue
	 * @param key 参数key
	 * @param defaultValue
	 * @return 参数值
	 */
	public Object getParameter(String key , Object defaultValue)
	{
		if(!this.data.containsKey(key) || this.data.get(key) == null)
		{
			return defaultValue;
		}
		return this.data.get(key);
	}
	
	/**
	 * TODO 获取一个整型值
	 * @param key 参数key
	 * @return 参数值
	 */
	public Integer getInteger(String key)
	{
		Object obj = this.getParameter(key);
		if(obj == null)
		{
			return null;
		}
		return Integer.parseInt(obj.toString());
	}
	
	/**
	 * TODO 获取一个长整型值
	 * @param key 参数key
	 * @return 参数值
	 */
	public Long getLong(String key)
	{
		Object obj = this.getParameter(key);
		if(obj == null)
		{
			return null;
		}
		return Long.parseLong(obj.toString());
	}
	
	/**
	 * TODO 获取一个浮点型
	 * @param key 参数key
	 * @return 参数值
	 */
	public Float getFloat(String key)
	{
		Object obj = this.getParameter(key);
		if(obj == null)
		{
			return null;
		}
		return Float.parseFloat(obj.toString());
	}
	
	/**
	 * TODO 获取一个双精度型
	 * @param key 参数key
	 * @return 参数值
	 */
	public Double getDouble(String key)
	{
		Object obj = this.getParameter(key);
		if(obj == null)
		{
			return null;
		}
		return Double.parseDouble(obj.toString());
	}
	
	/**
	 * TODO 获取一个字节型
	 * @param key 参数key
	 * @return 参数值
	 */
	public Byte getByte(String key)
	{
		Object obj = this.getParameter(key);
		if(obj == null)
		{
			return null;
		}
		return Byte.parseByte(obj.toString());
	}
	
	/**
	 * TODO 获取一个字符串型
	 * @param key 参数key
	 * @return 参数值
	 */
	public String getString(String key)
	{
		Object obj = this.getParameter(key);
		if(obj == null)
		{
			return null;
		}
		return obj.toString();
	}
	
	/**
	 * TODO 获取一个Map型
	 * @param key 参数key
	 * @return 参数值
	 */
	public Map<String,String> getMap(String key)
	{
		Object obj = this.getParameter(key);
		if(obj == null)
		{
			return null;
		}
		return (Map<String, String>) obj;
	}
	
	/**
	 * TODO 获取一个Map型
	 * @param key 参数key
	 * @return 参数值
	 */
	public List<Map<String,String>> getList(String key)
	{
		Object obj = this.getParameter(key);
		if(obj == null)
		{
			return null;
		}
		return (List<Map<String,String>>) obj;
	}

	public Map<String, T> getData()
	{
		return data;
	}

	public void setData(Map<String, T> data)
	{
		this.data = data;
	}
}
